﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Workflow2211A.Application.DTO.Inputs.IndependentBilling;
using Workflow2211A.Application.DTO.Outputs.IndependentBilling;
using Workflow2211A.Domain.IndependentBilling.CheckupItem;
using Workflow2211A.Domain.IndependentBilling.DrugCategory;
using Workflow2211A.Domain.IndependentBilling.MedicalInstitution;
using Workflow2211A.Domain.IndependentBilling.TestItem;

namespace Workflow2211A.Application.Services.IndependentBilling
{
    /// <summary>
    /// 开单管理接口
    /// </summary>
    public interface IBillingServices
    {
        /// <summary>
        /// 显示所有机构
        /// </summary>
        /// <returns></returns>
        List<MedicalInstitutionModel> ShowMedicalInstitution();

        /// <summary>
        /// 根据药品分类名称查询药品信息
        /// </summary>
        /// <param name="categoryName">药品分类名称</param>
        /// <returns>药品信息列表</returns>
        List<DrugInfoOutput> GetDrugsByCategoryName(string categoryName);

        /// <summary>
        /// 根据检查项目分类名称查询检查项目信息
        /// </summary>
        /// <param name="checkupCategoryName">检查项目分类名称</param>
        /// <returns>检查项目信息列表</returns>
        List<CheckupItemOutput> GetCheckupItemsByCategoryName(string checkupCategoryName);

        /// <summary>
        /// 根据检验项目分类名称查询检验项目信息
        /// </summary>
        /// <param name="testCategoryName">检验项目分类名称</param>
        /// <returns>检验项目信息列表</returns>
        List<TestItemOutput> GetTestItemsByCategoryName(string testCategoryName);

        /// <summary>
        /// 添加开单申请
        /// </summary>
        /// <param name="prescriptionDTO">开单申请信息</param>
        /// <returns>开单申请ID</returns>
        long AddPrescriptionApplication(PrescriptionApplicationDTO prescriptionDTO);

        /// <summary>
        /// 开单确认
        /// </summary>
        /// <param name="prescriptionId">开单申请ID</param>
        /// <returns>是否确认成功</returns>
        bool ConfirmPrescriptionApplication(long prescriptionId);

        /// <summary>
        /// 显示所有检查项目分类
        /// </summary>
        /// <returns>检查项目分类列表</returns>
        List<CheckupCategoryModel> ShowCheckupCategories();

        /// <summary>
        /// 显示所有药品分类
        /// </summary>
        /// <returns>药品分类列表</returns>
        List<DrugCategoryModel> ShowDrugCategories();

        /// <summary>
        /// 显示所有检验项目分类
        /// </summary>
        /// <returns>检验项目分类列表</returns>
        List<TestCategoryModel> ShowTestCategories();
        
    }
}
